package com.drinks.yiniang.ui.activity.shop;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.drinks.yiniang.R;
import com.drinks.yiniang.adapter.shop.MfrsDetailAdapter;
import com.drinks.yiniang.adapter.shop.MfrsExpertAdapter;
import com.drinks.yiniang.common.banner.MfrsBannerViewHolder;
import com.drinks.yiniang.common.recycler.decoration.ItemSpacesDecoration;
import com.drinks.yiniang.common.recycler.decoration.RecommendGoodsItemDecoration;
import com.drinks.yiniang.entity.goods.GoodsJson;
import com.drinks.yiniang.entity.goods.RecommendGoodsJson;
import com.drinks.yiniang.entity.shop.MfrsDetailJson;
import com.drinks.yiniang.io.api.GoodsApiIO;
import com.drinks.yiniang.io.api.ShopApiIO;
import com.drinks.yiniang.ui.activity.goods.GoodsDetailsActivity;
import com.drinks.yiniang.ui.widget.layout.ArrowExpandLayout;
import com.drinks.yiniang.ui.widget.recycler.BaseRecyclerView;
import com.drinks.yiniang.utils.RecyclerUtils;
import com.drinks.yiniang.utils.ToastUtils;
import com.hansen.library.Constants;
import com.hansen.library.io.tuple.Tuple2;
import com.hansen.library.listener.APIRequestCallback;
import com.hansen.library.listener.OnNavgationBarClickListener;
import com.hansen.library.ui.activity.BaseTranBarActivity;
import com.hansen.library.ui.widget.banner.BannerConfig;
import com.hansen.library.ui.widget.banner.ScaleBannerLayout;
import com.hansen.library.ui.widget.banner.Transformer;
import com.hansen.library.ui.widget.banner.holder.BannerViewHolder;
import com.hansen.library.ui.widget.banner.holder.HolderCreator;
import com.hansen.library.ui.widget.banner.listener.OnBannerListener;
import com.hansen.library.ui.widget.nav.NavigationBarLayout;
import com.hansen.library.ui.widget.textview.ExpandTextView;
import com.hansen.library.utils.StringUtils;

import java.util.ArrayList;

/**
 * 厂商详情页面
 *
 * @author han
 * @date 2019/09/08
 */
public class MfrsDetailActivity extends BaseTranBarActivity implements OnNavgationBarClickListener,
        BaseQuickAdapter.OnItemClickListener, BaseQuickAdapter.RequestLoadMoreListener {

    //nav
    private NavigationBarLayout nav_bar_mfrs_detail;
    //banner
    private ScaleBannerLayout banner_mfrs_header;
    //厂商名称
    private TextView tv_mfrs_detail_name;
    //英文名称
    private TextView tv_mfrs_detail_name_en;
    //内容
    private ArrowExpandLayout ll_mfrs_detail_content;
    //推荐商品列表
    private BaseRecyclerView rcv_mfrs_detail;
    //厂商专家列表
    private BaseRecyclerView rcv_mfrs_expert;

    private MfrsDetailAdapter mMfrsDetailAdapter;
    //厂商专家adapter
    private MfrsExpertAdapter mExpertAdapter;

    //厂商id
    private String mMfrsId;

    @Override
    protected void initView() {
        nav_bar_mfrs_detail = findViewById(R.id.nav_bar_mfrs_detail);

        banner_mfrs_header = findViewById(R.id.banner_mfrs_header);

        tv_mfrs_detail_name = findViewById(R.id.tv_mfrs_detail_name);
        tv_mfrs_detail_name_en = findViewById(R.id.tv_mfrs_detail_name_en);

        ll_mfrs_detail_content = findViewById(R.id.ll_mfrs_detail_content);

        rcv_mfrs_detail = findViewById(R.id.rcv_mfrs_detail);
        rcv_mfrs_expert = findViewById(R.id.rcv_mfrs_expert);
    }

    @Override
    protected void initData(Bundle savedInstanceState) {
        mContext = this;

        mMfrsId = getIntent() != null ? getIntent().getStringExtra(Constants.KeyId) : null;

        initBanner();
        initAdapter();
        initExpertAdapter();
        getMfrsDetail();
    }

    private void initAdapter() {
        rcv_mfrs_detail.setLayoutManager(RecyclerUtils.getVerticalGridLayout(mContext, 2));
        rcv_mfrs_detail.addItemDecoration(RecommendGoodsItemDecoration.getItemDPDecoration(10));

        mMfrsDetailAdapter = new MfrsDetailAdapter(mContext, new ArrayList<GoodsJson.GoodsList>());
        mMfrsDetailAdapter.addHeaderView(getHeaderView());
        mMfrsDetailAdapter.setHeaderAndEmpty(true);
        mMfrsDetailAdapter.setCommonEmpty(getLayoutInflater(), rcv_mfrs_detail);
        mMfrsDetailAdapter.bindToRecyclerView(rcv_mfrs_detail);
    }

    private void initExpertAdapter() {
        rcv_mfrs_expert.setLayoutManager(RecyclerUtils.getHorizontalLinearLayout(mContext));
        rcv_mfrs_expert.addItemDecoration(ItemSpacesDecoration.getItemAllDPDecoration(10));

        mExpertAdapter = new MfrsExpertAdapter(mContext, new ArrayList<MfrsDetailJson.MfrsDetailUser>());
        mExpertAdapter.bindToRecyclerView(rcv_mfrs_expert);
    }

    //获取header
    private View getHeaderView() {
        View mHeaderView = getLayoutInflater().inflate(R.layout.header_common_title, (ViewGroup) rcv_mfrs_detail.getParent(), false);

        TextView tv_header_common_title = mHeaderView.findViewById(R.id.tv_header_common_title);

        tv_header_common_title.setText(R.string.text_recommend_produce_dot);

        return mHeaderView;
    }

    private void initBanner() {
        banner_mfrs_header.setAutoPlay(false)
                .setOffscreenPageLimit(0)
                .setPages(new ArrayList<>(), new HolderCreator<BannerViewHolder>() {
                    @Override
                    public BannerViewHolder createViewHolder() {
                        return new MfrsBannerViewHolder();
                    }
                })
                .setLoop(false)
                .setBannerStyle(BannerConfig.NUM_INDICATOR)
                .setBannerAnimation(Transformer.Default)
                .setOnBannerListener(new OnBannerListener() {
                    @Override
                    public void onBannerClick(View v, int pos) {

                    }
                }).start();
    }

    @Override
    protected void initListener() {
        nav_bar_mfrs_detail.setOnNavgationBarClickListener(this);

        mMfrsDetailAdapter.setOnItemClickListener(this);
        mMfrsDetailAdapter.setOnLoadMoreListener(this, rcv_mfrs_detail);
    }

    @Override
    public void widgetClick(View v) {

    }

    @Override
    public int getTranBarResID() {
        return R.layout.activity_mfrs_detail;
    }

    @Override
    public void onBackClick(View v) {
        finish();
    }

    @Override
    public void onEditClick(View v) {

    }

    @Override
    public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
        if(adapter instanceof MfrsDetailAdapter) {
            GoodsJson.GoodsList data = mMfrsDetailAdapter.getItem(position);

            if(data == null) {
                return;
            }

            Intent intent = new Intent(mContext, GoodsDetailsActivity.class);
            intent.putExtra(Constants.KeyGoodsId, data.getId());
            startActivity(intent);
        }
    }

    @Override
    public void onLoadMoreRequested() {

    }

    //获取厂商详情
    private void getMfrsDetail() {
        if(StringUtils.isEmpty(mMfrsId)) {
            ToastUtils.showShort(R.string.text_mfrs_no_exist);
            return;
        }

        //获取厂商详情
        ShopApiIO.getInstance().getMfrsBrandDetail(mMfrsId, new APIRequestCallback<MfrsDetailJson, Tuple2<Integer, String>>() {
            @Override
            public void onSuccess(MfrsDetailJson res) {
                setData(res.getData());
            }

            @Override
            public void onError(Tuple2<Integer, String> error) {

            }

            @Override
            public void onComplete() {

            }
        });

        //推荐商品
        getRecommendGoodsList();
    }

    //设置厂商数据
    private void setData(MfrsDetailJson.MfrsDetailData data) {
        nav_bar_mfrs_detail.setNavBarTitle(data.getName());

        banner_mfrs_header.update(data.getImages_list());

        tv_mfrs_detail_name.setText(data.getName());
        tv_mfrs_detail_name_en.setText(data.getEn_name());
        ll_mfrs_detail_content.addExpandTextView("现在,移动应用中集成地图已经成为一种趋势。导航 - 作为地图中不可或缺的一项功能,被很多移动应用所青睐,然而,导航方式选择上,为了减少不必要的资源和apk容量,一般应用都选择通过调用第三方的地图应用来实现导航功能。在介绍之前,先看一下最终效果");

        mExpertAdapter.getData().clear();

        if(data.getFans() != null) {
            mExpertAdapter.addData(data.getFans());
        } else {
            mExpertAdapter.notifyDataSetChanged();
        }
    }

    //获取推荐列表
    private void getRecommendGoodsList() {
        showLoadingDialog();

        GoodsApiIO.getInstance().getRecommendGoodsList(new APIRequestCallback<RecommendGoodsJson, Tuple2<Integer, String>>() {
            @Override
            public void onSuccess(RecommendGoodsJson res) {
                if(mMfrsDetailAdapter == null) {
                    return;
                }

                mMfrsDetailAdapter.getData().clear();
                mMfrsDetailAdapter.addData(res.getData());
                mMfrsDetailAdapter.loadMoreEnd();
            }

            @Override
            public void onError(Tuple2<Integer, String> error) {
                ToastUtils.showShort(error._2);
                mMfrsDetailAdapter.loadMoreFail();
            }

            @Override
            public void onComplete() {
                dismissDialog();
            }
        });
    }
}
